﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CityGames
{
    public partial class FormJuegosGestionCopias : Form
    {
        static private CopiaFisica copiaFisica = new CopiaFisica();
        static public DataSet dsCopiasFisicas = new DataSet();

        private FormContenedor contenedor;
        private const int numeroDeJuegosPorPagina = 13;
        private int numeroDePaginaActual;
        private int numeroDePaginasMaximo;
        private string nombreJuego;
        private string plataformaJuego;
        private string tipoCopiasNuevas;
        private int numeroCopiasNuevas;

        public FormJuegosGestionCopias()
        {
            InitializeComponent();
        }

        private void FormJuegosGestionCopias_Load(object sender, EventArgs e)
        {
            try
            {
                contenedor = (FormContenedor)MdiParent;

                nombreJuego = "";
                plataformaJuego = "";

                tipoCopiasNuevas = "";
                numeroCopiasNuevas = 0;

                numeroDePaginaActual = 1;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void RellenarConDatosDeJuego(string nombre, string plataforma)
        {
            try
            {
                nombreJuego = nombre;
                plataformaJuego = plataforma;
                rbTodos.Checked = true;
                numeroDePaginaActual = 1;

                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bInsertarCopiasNuevas_Click(object sender, EventArgs e)
        {
            try
            {
                bool insertadas = true;
                bool error = false;
                FormJuegosAltaCopias altaCopias = new FormJuegosAltaCopias(this);
                altaCopias.ShowDialog();
                altaCopias.Dispose();

                if (tipoCopiasNuevas == "Alquiler" || tipoCopiasNuevas == "Nueva" || tipoCopiasNuevas == "Segunda Mano")
                {
                    if (!(copiaFisica.InsertarCopias(numeroCopiasNuevas, tipoCopiasNuevas, nombreJuego, plataformaJuego)))
                    {
                        error = true;
                        insertadas = false;
                    }
                }
                else
                {
                    insertadas = false;
                }

                if (insertadas)
                {
                    MessageBox.Show("Se han insertado " + numeroCopiasNuevas.ToString() + " copia(s) de tipo: " + tipoCopiasNuevas + "    ", "Copias insertadas correctamente.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if(error)
                {
                    MessageBox.Show("Error. No se han podido insertar todas o parte de las copias.    ", "Error en la insercion de nuevas copias.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                bool borradas = true;
                int numeroBorradas = 0;

                if (dgvJuegos.SelectedRows.Count > 0)
                {
                    if (MessageBox.Show("¿Realmente desea eliminar los juegos seleccionados?", "Confirmar eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        foreach (DataGridViewRow row in dgvJuegos.SelectedRows)
                        {
                            if (!(copiaFisica.BorrarCopiaFisica(int.Parse(row.Cells[0].Value.ToString()))))
                                borradas = false;

                            numeroBorradas++;
                        }

                        CargarDataGridViewJuegos();
                    }

                    if (borradas)
                    {
                        MessageBox.Show(numeroBorradas.ToString() + " copia(s) eliminada(s) con éxito.    ", "Copias borradas.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar almenos un juego.    ", "Seleccionar juegos para eliminar.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bSalir_Click(object sender, EventArgs e)
        {
            try
            {
                contenedor.hijoFormJuegosGestion.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDataGridViewJuegos()
        {
            try
            {
                lblNombreJuego.Text = nombreJuego + " - " + plataformaJuego;

                if (numeroDePaginaActual == 0)
                    numeroDePaginaActual = 1;

                if (rbTodos.Checked)
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.ObtenerTodasLasCopiasFisicas(nombreJuego, plataformaJuego).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsCopiasFisicas = copiaFisica.ObtenerTodasLasCopiasFisicasPaginadas(nombreJuego, plataformaJuego, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgvJuegos.DataSource = dsCopiasFisicas;
                    dgvJuegos.DataMember = "CopiasFisicasPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }
                else if (rbAlquiler.Checked)
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.ObtenerTodasLasCopiasFisicasParaAlquilar(nombreJuego, plataformaJuego).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsCopiasFisicas = copiaFisica.ObtenerTodasLasCopiasFisicasParaAlquilarPaginadas(nombreJuego, plataformaJuego, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgvJuegos.DataSource = dsCopiasFisicas;
                    dgvJuegos.DataMember = "CopiasAlquilerPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }
                else if (rbNuevas.Checked)
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.ObtenerTodasLasCopiasFisicasNuevas(nombreJuego, plataformaJuego, cbNoVendidas.Checked).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsCopiasFisicas = copiaFisica.ObtenerTodasLasCopiasFisicasNuevasPaginadas(nombreJuego, plataformaJuego, cbNoVendidas.Checked, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgvJuegos.DataSource = dsCopiasFisicas;
                    dgvJuegos.DataMember = "CopiasNuevasPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }
                else
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.ObtenerTodasLasCopiasFisicasSegundaMano(nombreJuego, plataformaJuego, cbNoVendidas.Checked).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsCopiasFisicas = copiaFisica.ObtenerTodasLasCopiasFisicasSegundaManoPaginadas(nombreJuego, plataformaJuego, cbNoVendidas.Checked, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgvJuegos.DataSource = dsCopiasFisicas;
                    dgvJuegos.DataMember = "CopiasSegundaManoPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }

                if (numeroDePaginaActual <= 1)
                {
                    bDGVPaginaAnterior.Enabled = false;
                    bDGVPrimeraPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaAnterior.Enabled = true;
                    bDGVPrimeraPagina.Enabled = true;
                }

                if (numeroDePaginaActual == numeroDePaginasMaximo)
                {
                    bDGVPaginaSiguiente.Enabled = false;
                    bDGVUltimaPagina.Enabled = false;
                }
                else
                {
                    bDGVPaginaSiguiente.Enabled = true;
                    bDGVUltimaPagina.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
                cbNoVendidas.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbAlquiler_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
                cbNoVendidas.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbNuevas_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
                cbNoVendidas.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbSegundaMano_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
                cbNoVendidas.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        //Ya no se utiliza
        private bool ActualizarCopias()
        {
            bool resultado = false;

            try
            {
                resultado = copiaFisica.InsertarCopias(numeroCopiasNuevas, tipoCopiasNuevas, nombreJuego, plataformaJuego);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return resultado;
        }

        public void AgregarCopiasNuevas(string tipoCopias, int numeroCopias)
        {
            try
            {
                tipoCopiasNuevas = tipoCopias;
                numeroCopiasNuevas = numeroCopias;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbNoVendidas_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
